#include <stdio.h>      // perror/printf
#include <fcntl.h>      // open/creat
#include <unistd.h>     // read/write/close
#include <stdlib.h>     // exit

#define BUFSIZE 4096    // 现代Linux文件系统块大小

int main() {
    const char *src = "fileA.txt";
    const char *dst = "fileB.txt";
    int fd_src, fd_dst;
    ssize_t rd_cnt, wr_cnt;
    char buf[BUFSIZE];

    /*---------- 阶段1：打开源文件 ----------*/
    if ((fd_src = open(src, O_RDONLY)) == -1) {
        perror("[FATAL] 打开源文件失败");
        exit(EXIT_FAILURE);
    }

    /*---------- 阶段2：创建目标文件 ----------*/
    if ((fd_dst = creat(dst, 0644)) == -1) {  // 更安全的权限：rw-r--r--
        perror("[FATAL] 创建目标文件失败");
        close(fd_src);
        exit(EXIT_FAILURE);
    }

    /*---------- 阶段3：数据拷贝 ----------*/
    while ((rd_cnt = read(fd_src, buf, BUFSIZE)) > 0) {
        wr_cnt = write(fd_dst, buf, rd_cnt);
        if (wr_cnt != rd_cnt) {
            perror("[ERROR] 数据写入不完整");
            break;
        }
    }

    /*---------- 阶段4：资源清理 ----------*/
    if (close(fd_src) == -1) perror("[WARN] 源文件关闭异常");
    if (close(fd_dst) == -1) perror("[WARN] 目标文件关闭异常");
    
    /*---------- 阶段5：删除原文件 ----------*/
    if (unlink(src) == -1) {
        perror("[ERROR] 原文件删除失败");
        exit(EXIT_FAILURE);
    }

    printf("\n✅ 操作成功:\n   %s → %s\n", src, dst);
    return EXIT_SUCCESS;
}
